package com.example.webview;

import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;

/**
 * webView控件
 *   1.加载网页显示 加载HTML数据
 *
 *   TODO 1.基本使用
 *   TODO 2.控制webview的加载
 */
public class MainActivity extends AppCompatActivity {

    private WebView webView;
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView= ((WebView) findViewById(R.id.webView));
        imageView= ((ImageView) findViewById(R.id.image));

        //设置为别玩支持javasc
        //得到webview的配置
        WebSettings settings=webView.getSettings();
        settings.setJavaScriptEnabled(true);

        //TODO  讲一个类的对象 传递给webview的Windows容器 公内部的HTML、js调用
        /**
         * 参数1  传递的对象
         * 参数2  别称
         */
        webView.addJavascriptInterface(new MyClass(this),"xiao");

        //设置webviewclient
        webView.setWebViewClient(new MyWebViewClient());
        //可以获取网站的title  获取网站的logo  获取网站的具体加载进度
        webView.setWebChromeClient(new MyChormeClient());


        //加载网络页面
//        webView.loadUrl("http://www.baidu.com");
        //加载本地数据
        settings.setAllowFileAccess(true);
        settings.setAllowContentAccess(true);
        webView.loadUrl("file:///android_asset/index.html");

    }

    public void btnClick(View view) {

        //TODO  点击button调用JavaScript的 forAndroid
        webView.loadUrl("javascript:forAndroid('android传递过来的参数！！')");
    }

    /**
     * TODO  webviewclient
     *    1.可以防止手机URL通过手机自带的浏览器进行加载
     *    2.可以根据逻辑拦截网址
     *    3.页面开始加载
     *    4.页面加载完成
     */
    class MyWebViewClient extends WebViewClient{

        /**
         * 注意：webview调用loadurl不会触发此方法
         * 当加载内部跳转的URL时  第一调用此方法
         * 可以给咱们一个机会，可以去拦截要加载的URL
         * 如果想要拦截  返回值写成true
         * 如果写成false 和 super 代表不拦截
         * @param view
         * @param url
         * @return
         */
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            Log.e("tag", "shouldOverrideUrlLoading: "+url);
//            if (url.length()>0){
//
//                return true;
//            }

            return super.shouldOverrideUrlLoading(view, url);
        }

        /**
         * 当页面开始加载
         * @param view
         * @param url
         * @param favicon   返回图标
         */
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }

        /**
         * 当页面加载完成
         * @param view
         * @param url
         */
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
        }
    }

    /**
     * TODO  通过设置webchormeclient可以获取一些方法
     * TODO  这些方法可以获取当前页面的加载进度 可以获取当前页面的logo  可以获取当前页面的title
     */
    class MyChormeClient extends WebChromeClient{

        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);

            Log.e("tag", "onProgressChanged: "+newProgress);
        }

        @Override
        public void onReceivedTitle(WebView view, String title) {
            super.onReceivedTitle(view, title);
            if (!TextUtils.isEmpty(title)){

                //settitle是actionbar的方法  设置actionbartitle
                setTitle(title);
            }
        }

        //当前网页的logo
        @Override
        public void onReceivedIcon(WebView view, Bitmap icon) {
            super.onReceivedIcon(view, icon);

            if (icon!=null){

                imageView.setImageBitmap(icon);
            }
        }
    }

    //返回键的监听
    @Override
    public void onBackPressed() {

        //TODO  如果调用webview向后加载，加载上一个页面，那么必须要判断是否存在上一个页面
        //TODO  加载下一个页面，同理必须判断是否存在下一个页面

//        webView.canGoBack();//是否存在上一个页面
//        webView.canGoForward();//是否存在下一个页面
//        webView.goBack();//加载上一个页面
//        webView.goForward();//加载下一个页面

        if (webView.canGoBack()){

            webView.goBack();
        }else {

            finish();//关闭当前页面
        }

    }
}
